<p>过去两周,我们对开源之夏活动中表现优异的开发者们进行了<a href="https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FT2uI_HmE9VoPK4e5kAXBEw%3Ftoken%3D1029861094%26lang%3Dzh_CN" target="_blank">简单的采访</a>,初步粗略地了解了一下他们的开发过程和心得体会。今天,我们将通过同学们的完整结项报告,深入了解项目的开发技术细节,希望能够帮助大家更好地了解 Apache SeaTunnel 项目的最新进展。</p>
接下来是关于Apache SeaTunnel支持metalake开发这一项目的完整报告:
一、项目背景
目前,Apache SeaTunnel 的任务配置中,数据源的用户名和密码等敏感信息直接写死在任务脚本中,这种方式 存在以下问题:
- 安全隐患:敏感信息暴露在脚本中,易导致数据源信息泄漏。
- 维护困难: 数据源配置信息发生变更时,需手动修改所有相关任务脚本,效率低下且易出错。
为解决上述问题,本项目旨在通过集成metalake,实现数据源信息的集中存储和管理。通过数据源 ID 映射机 制,用户可方便地更新和管理数据源配置。本项目的目标是支持主流数据目录 Apache Gravitino,并通过预留 接口,方便扩展支持其他第三方数据目录服务。
Apache Gravitino获取数据源配置信息的REST API示例见于:https://gravitino.apache.org/docs/0.9.0- incubating/api/rest/load-catalog
代码仓库见于: https://github.com/apache/seatunnel
-
完成metalake配置信息适配 将metalake配置信息配置在seatunnel-env中,任务启动后加载到任务配置脚本的env中。
1.1 任务启动时读取
seatunnel-env中的配置项。 1.2 将配置集成到任务脚本的env中,确保任务能够正确加载metalake配置。 -
完成source和sink的数据源配置信息改造 读取
env中是否开启metalake标识,在source和sink中增加sourceId作为查询metalake的唯一标识,获取数据 源信息并替换source/sink配置项中的占位符。2.1 在source和sink配置中增加sourceId配置项。 2.2 支持source/sink配置项中的占位符替换,通过sourceId动态获取数据源信息。
-
插件方式支持metalake并集成Apache Gravitino 定义metalake接口,支持根据唯一ID查询数据源配置信息,并实现Apache Gravitino数据源信息转换为 SeaTunnel配置项占位符的功能。 3.1 定义metalake实现接口,提供数据源查询功能。 3.2 支持Apache Gravitino集成,参考Gravitino REST API文档。 3.3 支持扩展性,通过实现接口可支持其他数据目录,如UnityCatalog或DataHub。 3.4 确保向后兼容,不影响存量任务的正常运行。
二、方案描述

-
完成metalake配置信息适配
1.1 任务启动时读取
seatunnel-env中配置项
- 实现目标:在任务启动时,从
seatunnel-env.sh或者任务配置文件中读取metalake相关的配置。 - 实现方法:在
seatunnel-env.sh文件中定义metalake配置项,例如:
METALAKE_ENABLED=true
METALAKE_TYPE=gravitino
METALAKE_URL=http://localhost:8090/api/metalakes/metalake_name/catalogs /
...
或者在任务配置文件中的env中配置
env{
metalake_enabled = true
metalake_type = "gravitino"
metalake_url =
"http://localhost:8090/api/metalakes/metalake_name/catalogs/" }
1.2 将配置集成到env中
- 实现目标:将读取的metalake配置集成到任务的env中。
- 实现方法:
- 若用户在任务配置文件中配置env,那么自然无需集成。
- 若在seatunnel-env.sh脚本中配置,也可通过System.getEnv()获得,无需集成到env中